#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 100 //线性表存储空间初始分配量
#define INCREMENT 10 //线性表存储空间分配增加量
typedef int ElemType;//定义元素类型为int类型
typedef struct{
	ElemType *elem;//存储空间的基地址
	int length; //当前长度
	int listsize;//当前分配的存储容量，以sizeof(ElemType)为单位
} SqList;
/*初始化线性表，如果成功返回1，否则返回0*/
int InitList_Sq(SqList *L){
	L->elem=(ElemType *)malloc(INIT_SIZE*sizeof(ElemType));
	if(!L->elem) return 0;
	L->length=0;
	L->listsize=INIT_SIZE;
	return 1;
} 
/*打印顺序表的各个元素*/
int PrintSqList(SqList *L){
	int i;
	printf("\n the element of list is:\n");
	for(i=0;i<L->length;i++){
		printf("%d   ",L->elem[i]);
	}
	printf("\n");
}
/*在顺序表 第i个位置插入e元素*/
int ListInsert_Sq(SqList *L,int i,ElemType e){
	int j;
	ElemType *newbase;
	if(i<0||i>L->length) return 0;//插入失败
	if(L->length>=L->listsize){
		newbase=(ElemType *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(ElemType));
	if(!newbase)return 0;
	L->elem = newbase;
	L->listsize+=INCREMENT;
	}
	for(j=L->length-1;j>=i;j--)  //for 循环往后移动数据
		L->elem[j+1]=L->elem[j];
	L->elem[i]=e;
	++L->length;//插入成功表增长1
	return 1;
	
}
 main(){
	 SqList L;
	int status,e,i;
	status=InitList_Sq(&L);
	if(status){printf("initial the list for sucess");}
	else {printf("initial the list for failure");}
	status=ListInsert_Sq(&L,0,30);
	printf("\n%d",status);
	PrintSqList(&L);
	getchar();

}
